<?php
/*
 * @Author: yukun-ABMO2O 3420326614@qq.com
 * @Date: 2023-10-14 20:19:01
 * @LastEditors: yukun-ABMO2O 3420326614@qq.com
 * @LastEditTime: 2023-10-14 22:17:38
 * @FilePath: \80\config\email\sendEmail.php
 */

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'Exception.php';
require 'PHPMailer.php';
require 'SMTP.php';

class sendEmail
{
    private $mail;
    public function __construct()
    {
        $this->mail = new PHPMailer(true);
        //服务器配置
        $this->mail->CharSet = "UTF-8";                     //设定邮件编码
        $this->mail->SMTPDebug = 0;                        // 调试模式输出
        $this->mail->isSMTP();                             // 使用SMTP
        $this->mail->Host =  'smtp.qq.com';                // SMTP服务器
        $this->mail->SMTPAuth = true;                      // 允许 SMTP 认证
        $this->mail->Username = 'xxxx@qq.com';                // SMTP 用户名  即邮箱的用户名
        $this->mail->Password = 'xxxx';             // SMTP 密码  部分邮箱是授权码(例如qq邮箱,前往pc网页端登录邮箱，点击设置，点击账号，滑下来找到POP3/IMAP/SMTP...那栏，开启服务)
        $this->mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议
        $this->mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持
        $this->mail->setFrom('xxxx@qq.com');  //发件人
        $this->mail->addReplyTo('xxxx@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致
        //  $this->mailmail->addCC('cc@example.com');                    //抄送
        //  $this->mailmail->addBCC('bcc@example.com');     
    }

    public function send($param, $files = [])
    {
        try {

            // 收件人
            if (is_array($param['to'])) {
                foreach ($param['to'] as $to) {
                    $this->mail->addAddress($to);
                }
            } else {
                $this->mail->addAddress($param['to']);
            }

            //发送附件
            foreach ($files as $fileInfo) {
                if (is_array($fileInfo) && isset($fileInfo['file']) && isset($fileInfo['name'])) {
                    $filePath = $fileInfo['file']; // 添加附件地址
                    $fileName = $fileInfo['name'];    // 发送附件并且重命名
                    $this->mail->addAttachment($filePath, $fileName);
                } else {
                    // 这是一个普通数组
                    $this->mail->addAttachment($fileInfo);
                }
            }

            $this->mail->isHTML(true); // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
            $this->mail->Subject = $param["title"];
            $this->mail->Body    =  $param["Body"] ?  $param["Body"] : '无内容';
            $this->mail->AltBody =  $param["AltBody"] ? $param["AltBody"] : $param["Body"];
            $this->mail->send();
            return true;
        } catch (Exception $e) {
            echo '邮件发送失败: ',   $this->mail->ErrorInfo;
            return false;
        }
    }
}
